package model.materiasYCatedras;

import model.materiasYCatedras.Hora;

public class DiaYhorario {
	private String diaCursada;
	private Hora HoraInicio;
	private Hora HoraFin;
	
	public String getDiaCursada() {
		return diaCursada;
	}
	public void setDiaCursada(String diaCursada) {
		this.diaCursada = diaCursada;
	}
	public Hora getHoraInicio() {
		return HoraInicio;
	}
	public void setHoraInicio(Hora horaInicio) {
		HoraInicio = horaInicio;
	}
	public Hora getHoraFin() {
		return HoraFin;
	}
	public void setHoraFin(Hora horaFin) {
		HoraFin = horaFin;
	}
	
	/**
	 * Forma de instanciarlo 
	 * DiaYhorario("jueves", "18:20", "19:50")
	 * 
	 * @param dia
	 * @param inicio
	 * @param fin
	 */
	public DiaYhorario(String dia , String inicio, String fin){
		this.setDiaCursada(dia);
		this.setHoraInicio(new Hora(inicio));
		this.setHoraFin(new Hora(fin));
	}
	
	/**
	 * a este metodo hay que pasarle 
	 * hora de inicio y hora fin como parametros
	 * y es capaz de decir si se superpone
	 * con los que tiene seteados por defecto
	 * 
	 * @param inicio
	 * @param fin
	 * @return
	 */
	
//	public boolean seSuperponenHorarios(String dia, Hora inicio, Hora fin){
//		return (
//				(this.getDiaCursada().equals(dia)) 
//				&& !(this.mismaHora(inicio.getHora(), this.getHoraFin().getHora()) 
//						&& (this.comparacionDeMinutos(inicio.getMinutos(), this.getHoraFin().getMinutos())) 
//						|| (this.diferenciaEntreHoras(inicio.getHora(), this.getHoraFin().getHora())) > 1 
//						|| (this.diferenciaEntreHoras(inicio.getHora(), this.getHoraFin().getHora()) > 1 
//						&& this.comparacionDeMinutos(inicio.getMinutos(), this.HoraFin.getMinutos()))) 
//				&& !(this.mismaHora(this.HoraInicio.getHora(), fin.getHora()) 
//						&& (this.comparacionDeMinutos(this.HoraInicio.getMinutos(), fin.getMinutos())) 
//						|| (this.diferenciaEntreHoras(this.HoraInicio.getHora(), fin.getHora())) > 1 
//						|| (this.diferenciaEntreHoras(this.HoraInicio.getHora(), fin.getHora()) > 1 
//						&&	this.comparacionDeMinutos(this.HoraInicio.getMinutos(), fin.getMinutos())))
//			   );
//	}
	
	public boolean seSuperponenHorarios(String dia, Hora inicio, Hora fin){
		return (
				this.getDiaCursada().equals(dia) 
				&&
				this.mismaHoraInicio(inicio) ||
					(this.estaEntreInicioYFin(this.getHoraInicio(), this.getHoraFin(), inicio) || this.estaEntreInicioYFin(this.getHoraInicio(), this.getHoraFin(), fin)
					&&
					this.estaEntreInicioYFin(inicio, fin, this.getHoraInicio()) || this.estaEntreInicioYFin(inicio, fin, this.getHoraFin()))		
				);
	}
	
	public boolean estaEntreInicioYFin(Hora inicio, Hora fin, Hora horaAComparar){
		return(horaAComparar.esPosteriorA(inicio)) && horaAComparar.esAnteriorA(fin);
	}
	
	private int diferenciaEntreHoras(int hora1, int hora2){
		return hora1 - hora2;
	}
	
	public Boolean mismaHoraInicio(Hora hora){
		return (this.getHoraInicio().equals(hora));
	}
	
	private boolean comparacionDeMinutos(int minutos1, int minutos2){
		return minutos1 > minutos2;
	}
}


